/**
 * //给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * //
 * // 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 * //
 * //
 * //
 * // 示例 1:
 * //
 * //
 * //输入: nums = [0,1,0,3,12]
 * //输出: [1,3,12,0,0]
 * //
 * //
 * // 示例 2:
 * //
 * //
 * //输入: nums = [0]
 * //输出: [0]
 * //
 * //
 * //
 * // 提示:
 * //
 * //
 * //
 * // 1 <= nums.length <= 10⁴
 * // -2³¹ <= nums[i] <= 2³¹ - 1
 * //
 * //
 * //
 * //
 * // 进阶：你能尽量减少完成的操作次数吗？
 * //
 * // Related Topics 数组 双指针 👍 1736 👎 0
 */

package com.xixi.basicAlgroithms.dualPointer;

public class ID00283MoveZeroes {
    public static void main(String[] args) {
        Solution solution = new ID00283MoveZeroes().new Solution();
    }


    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public void moveZeroes(int[] nums) {

            int i = 0;
            int zIndex = -1;

            int n = nums.length;

            while (i < n) {
                if (nums[i] != 0) {
                    swap(++zIndex, i, nums);
                }

                i++;
            }


        }

        public void swap(int a, int b, int[] nums) {
            int tmp = nums[a];
            nums[a] = nums[b];
            nums[b] = tmp;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}